#include "stand.h"


int main()
{
	int i,j;
	int array[10] = {1,9,5,6,4,8,1,3,0,2};

	int sign,count;
	for (i = 0; i< ARRLEN(array,int) ; i++) {
		sign=0;
		for ( j = ARRLEN(array,int); j > i;j--) {
			if (array[j-1] > array[j]) { 
				sign = 1;
//				swap(&(array[j]), &(array[j-1]));
			}
//			printf("%d,%d\n",i,j);

		} 
		/* 
		 * 关于内部循环的看法：
			 * 由于冒泡排序的方向是从小到大，那么在在第一层排序时，就已经确定了第一个数，已经是最小的数据，然后就不需要在考虑，第一个数据，所有要j > i
		 * 以上的是从小到大的排序，那么从大到小的排序是什么？
		*/

		if (sign == 0) break;
	}
	for (i=0;i<ARRLEN(array,int);++i) { 
		printf("%d\t",array[i]);	
	}
	printf("\n");

	for (i =0;i<ARRLEN(array,int);i++) {
//		for (j= 1 ;j <ARRLEN(array,int)  ; ++j) { 
		for (j= 1 ;j <ARRLEN(array,int) - i ; ++j) { 
//			if (array[j-1] < array[j]) {
//				swap(&array[j-1],&array[j]);
			if (array[j-1] > array[j]) {
				swap(array+(j-1),array+j);
			count ++;
			}
		}
		printf("\n");
	}


	for (i=0;i<ARRLEN(array,int);++i) { 
		printf("%d\t",array[i]);	
	}
	printf("\ncount number :%d\n",count);
}

/*
 * 总结，一个正确的算法，一定要先确定你的判断条件是没有问题，判断的方式是，先让它运行（判断）一次，在确定判断条件没有问题的情况下，再去，考虑循环的条件。尽可能的降低无用的循环执行，可以提供程序的运行效率。
 * */



/*
 * 一个反思，为什么一个冒泡排序的算法就占用了你半天的时间，将近5个小时的时间。
	 * 原因1：有一点畏惧
	 * 原因2：思路不清晰，没有清晰到代码如何实现的那种地步，就下手去写。不用言之，就是错误咯。
	 * 最后总结，不要畏惧，滤清思路，找到判断条件，在找到循环条件，不就可以了。
 * */
